var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var multer = require('multer');
var winston = require('winston');
var expressWinston = require('express-winston');
const bodyParser = require('body-parser')
// 引入Token验证中间件
const verifyMiddleware = require('./routes/middleware/verify');

var indexRouter = require('./routes/index');
var multerUploadRouter = require('./routes/uploads');
var shareRouter = require('./routes/share');
var userRouter = require('./routes/user');
var remarkRouter = require('./routes/remark')
var likeRouter = require('./routes/like');
var adminRouter = require('./routes/admin');
const Token = require('./controller/token');

var app = express();



const cors = require('cors');
app.use(cors({credentials: true, origin: ['http://localhost:8010','http://localhost:8080','https://dingshiyuan123.cn']}));
// app.all("*",function(req,res,next){
//   //设置允许跨域的域名，*代表允许任意域名跨域
//   res.header("Access-Control-Allow-Origin","*");
//   res.header("Access-Control-Request-Headers","authorization");
//   //允许的header类型
//   res.header('Access-Control-Allow-Headers','origin,content-type,accept,authorization');
//   //跨域允许的请求方式
//   res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
//   if (req.method.toLowerCase() == 'options')
//     res.sendStatus(200);  //让options尝试请求快速结束
//   else
//     next();
// });

// 配置body-parser
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
//日志处理
// 正常请求的日志
app.use(expressWinston.logger({
  transports: [
    new (winston.transports.Console)({
      json: true,
      colorize: true
    }),
    new winston.transports.File({
      filename: 'logs/success.log'
    })
  ]
}));
//app.use(express.static(path.join(__dirname, 'public')));
app.use('/web/api/uploads',express.static(path.join(__dirname, 'uploads')))
app.use('/web/api/v1/api', express.static('public'));

app.use('/web/api/',indexRouter);
app.use('/web/api/upload', verifyMiddleware.verifyToken,multerUploadRouter);
app.use('/web/api/share', verifyMiddleware.verifyToken,shareRouter);
app.use('/web/api/user',verifyMiddleware.verifyToken,userRouter);
app.use('/web/api/remark',verifyMiddleware.verifyToken,remarkRouter)
app.use('/web/api/like',verifyMiddleware.verifyToken,likeRouter)
app.use('/web/api/admin',verifyMiddleware.verifyToken,adminRouter)

//错误请求的日志
app.use(expressWinston.errorLogger({
  transports: [
    new winston.transports.Console({
      json: true,
      colorize: true
    }),
    new winston.transports.File({
      filename: 'logs/error.log'
    })
  ]
}));
// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
